package com.hongyi.mapper;

import com.hongyi.daomain.Emp;
import com.hongyi.query.EmpQuery;
import com.hongyi.query.Qery;
import com.hongyi.query.TiaoJian;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author hongyi
 * @date 2023/11/2 18:46
 */
@Mapper
public interface EmpMapper {

    /**
     * 根据ID查询
     * @param id
     * @return
     */
    Emp findOne(long id);

    /**
     * 查询所有
     * @return
     */
    List<Emp> findAll();

    /**
     * 插入
     * @param emp
     */
    void save(Emp emp);

    /**
     * 修改
     * @param emp
     */
    void update(Emp emp);

    /**
     * 根据ID删除
     * @param id
     */
    void delete(Long id);

    /**
     * 根据 address 和 age 来查询
     * @param empQuery
     * @return
     */
    List<Emp> findEmpByQuery(EmpQuery empQuery);


    /**
     * 根据dept_id 和 age 来查询
     * @param qery
     * @return
     */
    List<Emp> findEmpQuery(Qery qery);

    /**
     * 统计emp 表中的数据条数
     * @return
     */
    Integer count();


    /**
     * 根据id 去找
     * @param id
     * @return
     */
    Emp getOne(int id);

    Emp getOne1(int id);

    /**
     * 查找所有的 一对一查询 两张表
     * @return
     */
    List<Emp> getAll();


    /**
     * getOne01
     * getAll01
     * 这两个方法实现了三表联查
     * @param id
     * @return
     */
    Emp getOne01(int id);

    List<Emp>  getAll01();



    // 搜索功能、条件查询
    // 名字【hongyi】 最小年龄【12】 最最大年龄【18】
    // 字符类型的搜索：模糊查询like
    // 数字类型的搜索: 数字区间
    // Mybatis 框架传递参数有很多方法: 封装一个对象传递（使用过)、封装一个map传参、 注解传参
    List<Emp> getTiaoJiang01(@Param("name") String name, @Param("min") Integer minAge, @Param("max") Integer maxAge);
    List<Emp> getTiaoJiang(TiaoJian tiaoJian);

    /**
     * 下面是分页查询
     */


    // 条件 + 分页
    // 功能一: 返回满足条件查询的记录数、总记录数 / 每页记录 = 页码
    int getCount(@Param("name") String name, @Param("min") Integer minAge, @Param("max") Integer maxAge);
    // 功能二： 根据页码返回某一页的数据集合。
    // 参数一： page、页码、第几页
    // 参数二： rows、每页的记录数、 5/10/15/20
    List<Emp> getPage_Tiaojian(@Param("page") Integer page, @Param("rows") Integer rows,@Param("name") String name, @Param("min") Integer minAge, @Param("max") Integer maxAge);


}
